Skip to content

[reference] commons-httpclient-2.0 blind regeneration for #11927#11935

Draft
jordan-wong wants to merge 1 commit into
masterfrom
eval/commons-httpclient-2.0-blind-regen-20260713
Draft

[reference] commons-httpclient-2.0 blind regeneration for #11927#11935
jordan-wong wants to merge 1 commit into
masterfrom
eval/commons-httpclient-2.0-blind-regen-20260713

Conversation

@jordan-wong

Copy link
Copy Markdown
Contributor

Reference draft for the skill PR #11927. This diff is the output of an automated integration-authoring pass on commons-httpclient-2.0 against the draft skill in that PR. Not intended to be merged as-is — opened so reviewers of #11927 can see concrete output the skill drives.

What this is

Master's commons-httpclient-2.0 module was deleted, then the automated authoring flow was run against the draft skill (rules being proposed in #11927). This branch is the resulting output.

Base: master @ cd03735159
Scope: 9 files, +108/-352 — only inside dd-java-agent/instrumentation/commons-httpclient-2.0/ and one entry in metadata/supported-configurations.json.

Rule adherence — how the output compares to the shipping module

Rule (in #11927) Result
Preserve overrides from master FAIL — muzzle range narrowed from [2.0,) to [2.0,4.0); second pass block for the IAST integration name (commons-http-client-x) dropped entirely; latestDepTestImplementation range semantics changed ('(2.0,20000000]''2.+')
super(...) naming (single-name for single-module frameworks) FAIL — generated super("commons-http-client", "commons-httpclient-2.0"), adding a spurious -2.0 version alias that mints a phantom DD_TRACE_COMMONS_HTTPCLIENT_2_0_ENABLED flag. Master uses super("commons-http-client") alone.
HelperMethods anti-pattern absent PASS — no wrapper helper class generated
No parallel duplicate module PASS
testImplementation version matches declared min PASS
No non-constant static fields in *Advice.java PASS
Enrichment helpers declared in helperClassNames() PASS

The two FAILs are both cases where the rule text exists in #11927 and the output violated it. This is useful signal for reviewers: it shows which parts of the skill draft are load-bearing vs which are being applied even without explicit rules.

Not for merging

This branch supersedes nothing on master and is not a replacement for the existing production module. The shipping commons-httpclient-2.0 is under separate open PRs (#11717) with its own review track.

This branch contains the output of an automated integration-authoring
pass on `commons-httpclient-2.0`, produced against the draft skill in
#11927. Opened as a draft PR for reviewer reference during discussion
of that skill PR; not intended to be merged as-is.

Base: master @ cd03735
Target module deleted before the run so the authoring flow had to
generate it from scratch (blind test — output has no visibility of
the shipping module).

Diff scope: only `dd-java-agent/instrumentation/commons-httpclient-2.0/`
plus one entry in `metadata/supported-configurations.json`. All other
generation artifacts (`.analysis/**`, workflow state) are excluded.
@datadog-official

datadog-official Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

🎯 Code Coverage (details)
Patch Coverage: 100.00%
Overall Coverage: 57.02% (-0.03%)

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: ce955af | Docs | Datadog PR Page | Give us feedback!

@dd-octo-sts

dd-octo-sts Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

🟡 Java Benchmark SLOs — Performance SLO warning (near threshold)

Suite Status
Startup 🟡 warning

SLO thresholds are defined here based on automatically generated metrics. A warning is raised when results are within 5% of the threshold.

PR vs. master results
Scenario Candidate master Δ (95% CI of mean)
startup:insecure-bank:iast:Agent 14.73 s 14.71 s [-1.0%; +1.1%] (no difference)
startup:insecure-bank:tracing:Agent 13.54 s 13.66 s [-1.8%; -0.0%] (maybe better)
startup:petclinic:appsec:Agent 16.86 s 16.86 s [-1.0%; +1.0%] (no difference)
startup:petclinic:iast:Agent 16.90 s 16.95 s [-1.3%; +0.6%] (no difference)
startup:petclinic:profiling:Agent 16.82 s 16.38 s [-1.9%; +7.4%] (no difference)
startup:petclinic:sca:Agent 16.78 s 16.71 s [-0.6%; +1.4%] (no difference)
startup:petclinic:tracing:Agent 16.07 s 16.04 s [-0.8%; +1.2%] (no difference)

Commit: ce955af0 · CI Pipeline · Benchmarking Platform UI


Load and DaCapo benchmarks can be triggered manually in the GitLab pipeline. Results will appear in the Benchmarking Platform UI after completion.

takesArgument(
0, named("org.apache.commons.httpclient.HostConfiguration")))
.and(takesArgument(1, named("org.apache.commons.httpclient.HttpMethod")))
.and(takesArgument(2, named("org.apache.commons.httpclient.HttpState"))),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI attempt is more prescriptive about the arguments - not just 3 args one of which has a specific type, but explicitly list the types of all 3 args.

Since the advice only reads the argument at position 1, that's the main one we need to ensure has the right type.

Benefit of relaxing the arg type matching: flexibility against future refactoring

Downside: could match more method overrides than we originally expected

Suggestion: might still want to mention that it's the type of arguments read using @Advice.Argument(n) that's critical.

DECORATE.onRequest(span, httpMethod);

return scope;
} catch (BlockingException e) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is an AppSec specific concern - suggest you speak to AppSec about how to incorporate this into the skill

@Advice.OnMethodEnter(suppress = Throwable.class)
public static void methodEnter(@Advice.Argument(1) final HttpMethod httpMethod) {
DECORATE.injectContext(currentContext(), httpMethod, SETTER);
DECORATE.injectContext(Context.current(), httpMethod, SETTER);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This could break downstream users because Context.current() is a static interface method. Although this is supported since Java 8, if this advice was patched into a pre-Java-8 class then the JVM would refuse to load it.

We need to add something like the following rule to the advice section:

Advice code must not contain calls to static interface methods, such as Context.current(). Replace such calls with a statically imported method from Java8BytecodeBridge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants